#include "../inc/main.h"
#include "../inc/init_LCD.h"
#include "../inc/close_LCD.h"

void displayText(char *buf,
                 int font_size,
                 int size_x,
                 int size_y,
                 int sit_x,
                 int sit_y,
                 int fsit_x,
                 int fsit_y,
                 int R,
                 int G,
                 int B,
                 int maxWith)
{
    // 初始化Lcd
    struct LcdDevice *lcd = init_lcd("/dev/fb0");
    if (!lcd) {
        fprintf(stderr, "Failed to initialize LCD\n");
        return;
    }

    font *f = fontLoad("simfang.ttf");
    if (!f) {
        // fprintf(stderr, "Failed to load font\n");
        close_lcd(lcd);
        return;
    }

    // 字体大小的设置
    fontSetSize(f, font_size);

    // 创建位图
    bitmap *bm = createBitmapWithInit(size_x, size_y, 4, getColor(0, 255, 255, 255));
    if (!bm) {
        fprintf(stderr, "Failed to create bitmap\n");
        fontUnload(f);
        close_lcd(lcd);
        return;
    }

    // 将字体写到点阵图上
    fontPrint(f, bm, fsit_x, fsit_y, buf, getColor(0, B, G, R), maxWith);

    // 把字体框输出到LCD屏幕上
    show_font_to_lcd(lcd->mp, sit_x, sit_y, bm);

    // 释放资源
    fontUnload(f);
    destroyBitmap(bm);
    close_lcd(lcd); // 确保释放LCD资源
}


// 读取文件内容
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *read_file(const char *filename)
{
    FILE *fp = fopen(filename, "r"); // 只读模式打开文件
    if (fp == NULL)
    {
        perror("未能打开文件");
        return NULL;
    }

    size_t buf_size = 1024;
    char *buf = (char *)malloc(buf_size * sizeof(char)); // 分配内存
    if (buf == NULL)
    {
        perror("内存分配失败");
        fclose(fp);
        return NULL;
    }

    bzero(buf, buf_size * sizeof(char)); // 初始化 buf 为一个空字符串
    char tmp[1024];

    while (fgets(tmp, sizeof(tmp), fp))
    {
        size_t len = strlen(tmp);
        // 处理换行符
        if (len > 0 && tmp[len - 1] == '\n')
        {
            tmp[len - 2] = '\0'; // 去掉换行符
        }

        // 检查是否需要扩展 buf
        size_t current_len = strlen(buf);
        if (current_len + len + 1 > buf_size) // +1 for null terminator
        {
            buf_size *= 2; // 扩大缓冲区
            buf = (char *)realloc(buf, buf_size * sizeof(char));
            if (buf == NULL)
            {
                perror("内存重新分配失败");
                fclose(fp);
                return NULL;
            }
        }

        strcat(buf, tmp);
        strcat(buf, "\n"); // 添加换行符
    }

    fclose(fp);
    return buf; // 返回文件内容
}



// char *read_file(const char *filename)
// {
//     FILE *fp = fopen(filename, "r"); // 只读模式打开文件
//     if (fp == NULL)
//     {
//         printf("未能打开文件 %s\n", filename);
//         return NULL;
//     }
//     char *buf = (char *)malloc((1024 + 1) * sizeof(char)); // 分配内存
//     if (buf == NULL)
//     {
//         printf("内存分配失败\n");
//         fclose(fp);
//         return NULL;
//     }
//     bzero(buf, 1024);
//     char tmp[1024];
//     while (fgets(tmp, sizeof(tmp), fp))
//     {
//         size_t len = strlen(tmp);
//         if (len > 0 && tmp[len - 1] == '\n')
//         {
//             tmp[len - 2] = '\0'; // 去掉换行符
//         }
//         strcat(buf, tmp);
//         strcat(buf, "\n");
//     }

//     fclose(fp);
//     return buf; // 返回文件内容
// }
